The present invention relates to the field of computer graphics, and in particular to methods and apparatus for manipulating and posing computer graphics objects. Many computer graphic images are created by mathematically modeling the interaction of light with a three dimensional scene from a given viewpoint. This process, called rendering, generates a two-dimensional image of the scene from the given viewpoint, and is analogous to taking a photograph of a real-world scene. Animated sequences can be created by rendering a sequence of images of a scene as the scene is gradually changed over time. A great deal of effort has been devoted to making realistic looking rendered images and animations.
In computer-generated animation, an object's appearance is defined by a three-dimensional computer model. To appear realistic, the computer model of an object is often extremely complex, having millions of surfaces and tens of thousands of attributes. Due to the complexity involved with animating such complex models, particularly character models with hundreds or thousands of degrees of freedom, animators often rely on animation tools to define the object animation.
Animators typically use animation tools to specify animation variables, which are parameters used by functions to modify the position and orientation, or pose, of all or a portion of a model. Animation variables may specify relatively simple motions, such as the translation and rotation of objects, or complicated motions and model deformations, such as complex deformations and movements of the facial features.
Animators typically define animation variable values at specific frames or discrete moments of time, referred to as keyframes. The value of an animation variable along with its associated time is referred to as a control knot. Animation tools often interpolate animation variable values between control knots to determine the pose of models at other frames or moments of time.
Many models include complex hierarchies of joints. For example, a character model can include a shoulder joint connected between a torso model and an upper arm model, an elbow joint connected between the upper arm model and a lower arm model, a wrist joint connected between the lower arm model and a hand model, and several finger joints connected between the hand model and finger models. The pose or position and orientation of all of these portions of the character model's arm may be specified at least in part by the joint rotation angles of the shoulder joint, the elbow joint, the wrist joint, and the finger joints. Animators can specify these joint rotation angles directly. This is referred to as forward kinematics.
Alternatively, an animator may define the pose of a portion of a character model by specifying the position of one or more joints, rather than the joint angles. This is referred as inverse kinematics. In inverse kinematics, the animator often leaves some joints' positions unspecified or unconstrained. The animation tools then determine the positions of the unconstrained joints, based upon the lengths of “bones” between joints and each joint's acceptable range of motion. For example, an elbow joint may be constrained to a range of 150 degrees of rotation to prevent the animation tools from setting this joint's rotation angles outside of the range of motion possible in human anatomy. For example, an animator may specify that the hand of character model should contact another object in a scene. Thus, the animator specifies a position for the wrist joint. The animation tools then calculate the joint positions for the shoulder and elbow joints necessary for the hand to contact the object as specified.
Prior inverse kinematics techniques typically operate in one direction along a hierarchy of joints. For example, if an animator moves the elbow joint of a character model, the animation tool will use inverse kinematics to specify the positions of the shoulder and torso of the character model. In this example, the animation tool uses inverse kinematics to travel “up” the joint hierarchy from the joint being manipulated by a user (e.g. the elbow joint) to the top of the joint hierarchy. However, joints “below” the manipulated joint will simply follow the manipulated joint. For example, when the animator moves the elbow joint of a character model, the forearm and hand of the character model will rigidly follow the elbow joint without changing their relative orientation.
The directionality of prior inverse kinematics techniques is typically statically determined from the hierarchy of joints. However, these static unidirectional inverse kinematics techniques can make posing models difficult and time consuming. For example, an animator may first specify a position of the wrist joint of a character model to place the character's hand in contact with an object. The animation tools will then determine positions for the elbow, shoulder, and other joints of the character model. If the animator then tries to adjust the position of the elbow joint, the wrist joint, being “below” the elbow joint in the joint hierarchy, will rigidly move away from the object, undoing the animator's initial efforts in placing the hand in contact with the object.
One solution to prevent these types of problems with unidirectional inverse kinematics techniques is to use omni-directional inverse kinematics techniques. Omni-directional inverse kinematics techniques do not rely on a static hierarchy of joints to determine the positions of unconstrained joints. Instead, animators define “pins” for one or more joints. A joint that has been pinned will remain in a fixed position regardless of how other joints are manipulated. In general, when a portion of a model is manipulated, animation tools will apply inverse kinematics techniques to determine the positions of any joints located in a graph of joints between the manipulated portion of the model and one or more pinned joints. The animation tool may then define control knots that specify the joint positions or joint angles at the current frame or time for these joints.
For example, if a user sets a pin on the shoulder joint of a character model and then manipulates the position of the character model's hand, the wrist joint, elbow joint, and any other joints between the hand and the pinned shoulder joint will be posed using inverse kinematics techniques. Pins can be dynamically activated or deactivated for any joint. Continuing with this example, once the user has positioned the character model's hand, the user can set a pin to hold the hand in its new position. The user may then move the elbow joint of the character model to change the orientation of the upper and lower arms of the character, while keeping both the shoulder joint and hand in their previously specified positions. If the user then deactivates the pin in the shoulder joint and moves the shoulder joint, the animation tool will use inverse kinematics to further adjust the position of the character model's arm without changing the position of the hand. In this example, the animation tool applies inverse kinematics techniques in different directions through the graph of joints depending upon which joints are pinned or manipulated.
However, setting and unsetting pins for joints may be tedious and time-consuming for users. Additionally, kinematic chains, such as sets of connected joints implementing, for example, the limbs of character models, may behave unexpectedly if joints are not pinned correctly.